import torch

def f(x):
    return (x - 2) ** 2

x = torch.tensor([-3.5],requires_grad=True)
x_cur = x.clone()
x_prev = x_cur * 100
epsilon = 1e-5
eta = 0.1

while torch.linalg.norm(x_cur - x_prev) > epsilon:
    x_prev = x_cur.clone()
    value = f(x)
    value.backward()
    x.data -= eta * x.grad
    print(x.data)
    x.grad.zero_()

    x_cur = x.data

print(x_cur)